// /**
//  * @param {string} type
//  * @param {string} value
//  * @returns {Boolean}
//  */
// export function verify (type, value) {
//   const rules = {
//     'required': [/[\S]+/, '必填项不能为空'],
//     'phone': [/^1\d{10}$/, '手机号码无效！'],
//     'email': [/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/, '邮箱格式不正确'],
//     'url': [/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/, '链接格式不正确'],
//     'date': [/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/, '日期格式不正确'],
//     'identity': [/(^\d{15}$)|(^\d{17}(x|X|\d)$)/, '请输入正确的身份证号']
//   }
//   const [rule] = rules[type] || []
//   if (rule) {
//     return rule.test(value)
//   } else {
//     console.error('rule is error')
//   }
// }

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validURL (str) {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase (str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase (str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets (str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validEmail (str) {
  // eslint-disable-next-line
  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validPhone (str) {
  const reg = /^1[3-9]\d{9}$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validPhoneCode (str) {
  const reg = /^\d{6}$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validPwd (str) {
  const reg = /^(?=.*[0-9].*)(?=.*[A-Za-z].*).{8,16}$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validRequired (str) {
  const reg = /[\S]+/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function isString (str) {
  if (typeof str === 'string' || str instanceof String) {
    return true
  }
  return false
}

/**
 * @param {Array} arg
 * @returns {Boolean}
 */
export function isArray (arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}

/**
 * @param {Array} props
 * @param {Object} formRef
 * @returns {Promise} Boolean: 结果,prop：验证失败字段
*/
export function validateElemeFrom (props, formRef) {
  props = props.map(prop => prop)
  return new Promise(resolve => {
    validateField(props)
    function validateField (props) {
      if (!props.length) {
        return resolve(true)// 全部验证通过
      }
      const prop = props.splice(0, 1)[0]
      formRef.validateField(prop, errMsg => {
        if (errMsg) {
          resolve(false, prop) // 一个不过就返回失败结果
        } else {
          validateField(props)
        }
      })
    }
  })
}

// 计算字符串长度，英文1个字符，中文2个字符
export function computedStrLen (str) {
  let len = 0
  for (let i = 0; i < str.length; i++) {
    const c = str.charCodeAt(i)
    // 单字节加1
    if ((c >= 0x0001 && c <= 0x007e) || (c >= 0xff60 && c <= 0xff9f)) {
      len++
    } else {
      len += 2
    }
  }
  return len
}
